package annotation;

import java.lang.annotation.*;

@Target({ElementType.TYPE,ElementType.METHOD,ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface MyAnno {

    /*
    * 返回值类型只能是基本数据类型、String类型、枚举、注解以及它们的数组类型
    *
    * 如果只有一个属性需要赋值，且属性的名称为value，则value可以省略，直接写值
    *
    * 元注解:用于描述注解的注解
          * @Target :描述注解能够作用的位置
               ElementType取值:
                  * TYPE :可以作用于类上
                  * METHOD :可以作用于方法上
                  * FIELD:可以作用于成员变量上
         * @Retention :描述注解被保留的阶段(Source[源码阶段]，Class[字节码阶段]，RUNTIME[运行时阶段])
                  * @Retention(RetentionPolicy.RUNTIME) :当前被描述的注解，会保留到class字节码文件中，并被JVM读取到
         * @Documented :描述注解是否被抽取到api文档中
         * @Inherited :描述注解是否被子类继承, 说明子类可以继承父类中的该注解
         *         类继承关系中，子类会继承父类使用的注解中被@Inherited修饰的注解
         *         接口继承关系中，子接口不会继承父接口中的任何注解
         *         类实现接口时不会继承任何接口中定义的注解
    * */
    int value();
    String name() default "xff";

    Person show3();
    MyAnno2 show4();

    String[] show5();
}
